热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Webpack初探:Import和Require的使用

本文介绍了Webpack中Import和Require的基本概念和使用方法,帮助读者更好地理解和应用模块化开发。

前言:本文由编程笔记小编整理,旨在介绍 Webpack 中 Import 和 Require 的相关知识,希望对您有所帮助。


传统 Javascript 的引入方式

在过去,Javascript 文件通常按功能划分,并在 HTML 页面中通过 script 标签引入。这种方法要求开发者手动管理文件的引入顺序,确保依赖关系正确。随着前端工程的发展,模块化概念逐渐普及,使得前端开发更加规范和高效。


1. Export

每个 Javascript 文件可以视为一个模块,该模块可以被其他模块引入。引入后的结果是对该模块的执行结果进行封装。然而,模块内部的私有变量和函数不会自动暴露给外部,因此需要使用 export 关键字来决定模块对外公开的内容。

export 用于从模块中导出函数、对象或原始值,以便其他模块通过 import 语句使用这些内容。

例如,在 module1.js 中:

function fun1() {
console.log('module - 1 : function 1');
}
let person = {
name: '张三'
};
let str = '我是module1定义的字符串';
export { fun1, person, str };

在 main.js 中引入并使用这些导出的内容:

import * as module1 from './module1.js';
console.log(module1);

此时,module1 对象包含了 fun1、person 和 str,可以通过 module1 访问这些内容。

export 导出的内容会被添加到模块对象中,可以理解为深拷贝。


2. Export Default

初学者可能会疑惑,已经有了 export 为什么还需要 export default?实际上,export default 是为了提供一个默认的导出接口。

修改 module1.js:

function f1() {
console.log('module - 1 : function 1');
}
let b = {
name: 'test_obj'
};
let str = 'hello';
export { f1, b, str };
export default {
name: 'default'
};

export default 的作用是给模块对象添加一个 default 属性,该属性的值是一个对象,与 export default 导出的内容完全一致。


3. 文件导出总结

一个 Javascript 文件被当作模块引入时,会暴露为一个对象。export 用于在该对象中添加属性,export default 用于设置对象的 default 属性。


4.1 导出整个文件对象

使用 import * 语法可以导入模块的所有接口,并通过 as 指定一个命名空间对象。例如:

import * as m1 from './m1.js';
console.log(m1);

m1 命名空间对象可以访问模块的所有对外接口,包括 export 和 export default 的内容。


4.2 导出部分接口

在实际开发中,我们可能只需要导入模块的部分接口。通过在 import 语句中解构模块对象,可以实现这一点:

import { f1, b } from './m1.js';
console.log(f1);
console.log(b);

注意,默认导出的接口无法通过这种方式直接解构,因为 default 是关键字,不能作为变量名使用。


4.3 导入默认接口

默认导出的接口可以通过 import 语句直接导入,例如:

import d from './m1.js';
console.log(d);

此时,d 就是模块对象的 default 属性值,即 export default 导出的内容。


5. 动态导入

import 不仅是一个关键字,还是一个函数,可以异步加载模块。函数的参数是模块路径,返回一个 Promise 对象:

import('./m1.js').then(m => {
console.log('then:', m);
});

在 then 回调中,m 是模块的整个对象,包括 export 和 export default 的内容。


6. 仅作为副作用导入

import 还可以仅执行模块中的代码,而不导入任何接口。例如,在 Vue 项目中,我们可以在 init.js 文件中编写初始化逻辑,然后在 main.js 中直接引入:

import './lib/init.js';

这样做可以保持 main.js 文件的简洁,同时实现模块化管理。


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
author-avatar
然后突然4_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有